//
// Copyright (c) 2009 All Right Reserved
//
// Stephen Toub
// stoub@microsoft.com
// 2009-01-01
// Contains ...
using System;
using System.Globalization;
using System.IO;
using System.Text;
using LargoCommon.Abstract;
namespace LargoCommon.Midi {
/// A sequence number meta event message.
[Serializable]
public sealed class MetaSequenceNumber : MetaEvent {
#region Fields
/// The meta id for this event.
private const byte EventMetaId = 0x0;
/// The sequence number for the event.
private int number;
#endregion
#region Constructors
/// Initializes a new instance of the MetaSequenceNumber class.
/// The amount of time before this event.
/// The sequence number for the event.
public MetaSequenceNumber(long deltaTime, int number)
: base(deltaTime, EventMetaId) {
this.Number = number;
}
#endregion
#region Properties
/// Gets or sets the sequence number for the event.
/// General musical property.
private int Number {
get => this.number;
set {
if (value < 0 || value > 0xFFFF) {
throw new ArgumentOutOfRangeException(nameof(value), value, "The number must be in the range from 0x0 to 0xFFFF.");
}
this.number = value;
}
}
#endregion
#region To String
/// Generate a string representation of the event.
/// A string representation of the event.
public override string ToString() {
var sb = new StringBuilder();
sb.Append(base.ToString());
sb.Append("\t");
sb.Append(this.Number.ToString(CultureInfo.CurrentCulture.NumberFormat));
return sb.ToString();
}
#endregion
#region Methods
/// Write the event to the output stream.
/// The stream to which the event should be written.
public override void Write(Stream outputStream) {
if (outputStream == null) {
return;
}
//// Write out the base event information
base.Write(outputStream);
// Special meta event marker and the id of the event
outputStream.WriteByte(0x02);
outputStream.WriteByte((byte)((this.number & DefaultValue.MaskFirstByte) >> 8));
outputStream.WriteByte((byte)(this.number & 0xFF));
}
#endregion
}
}